package proc

import (
	"bufio"
	"common"
	"encoding/json"
	"fmt"
	"net"
	"os"
	"utils"
)

// ShowMenu 二级菜单
func ShowMenu() {
	var key byte
	var content string
	smsProc := &SmsProc{}

	for flag := true; flag; {
		fmt.Println("\n\t\t\t 1. 显示在线聊天用户列表")
		fmt.Println("\t\t\t 2. 发送消息")
		fmt.Println("\t\t\t 3. 信息列表")
		fmt.Println("\t\t\t 4. 退出系统")
		fmt.Print("\t请输入您的选择（1-4）： ")
		fmt.Scanf("%d\n", &key)
		fmt.Println()
		switch key {
		case 1:
			ShowOnlineUsersInfo()
		case 2:
			fmt.Print("请输入您要发送的消息：")
			rd := bufio.NewReader(os.Stdin)
			content, _ = rd.ReadString('\n')
			// step method
			smsProc.SendGroupMessage(content)

		case 3:
			fmt.Println("信息列表")
		case 4:
			fmt.Println("您正在退出系统.....")
			flag = false
		default:
			fmt.Println("输入错误，请重新输入")
		}
	}
	fmt.Printf("用户注销................ \n\n")


}

// ProcessServerMes 处理服务端 数据
func ProcessServerMes(conn net.Conn) (err error) {
	fmt.Println("\n等待接受服务端数据......")

	ut := &utils.Utils{
		Conn: conn,
	}
	for {
		mes, err := ut.ReadMes()
		if err != nil {
			fmt.Println("Failed to accept server data, err=",err)
			return err
		}
		switch mes.Type {
			case common.NOTIFYTYPE:
				var notifyUser common.NotifyUser
				if json.Unmarshal([]byte(mes.Data), &notifyUser) != nil {
					fmt.Println("json unmarshal notifyUser err", err)
					break
				}
				UpdateUserStatus(&notifyUser)
			case common.SmsMessageType:
				// 接受消息
				showMessage(&mes)
		default:
				fmt.Println("client invalid type...")
		}
	}
}
